home *** CD-ROM | disk | FTP | other *** search
/ Amiga Plus 2002 #11 / Amiga Plus CD - 2002 - No. 11.iso / Tools / Development / TinyGL / ami / content / ad709 / tinygl / src / api_select.c < prev    next >
Encoding:
C/C++ Source or Header  |  2002-08-15  |  1011 b   |  55 lines

  1. #include "zgl.h"
  2.  
  3. GLint GLAPIENTRY glRenderMode(GLenum mode) {
  4.     GLContext    *c = gl_get_context();
  5.     int            result = 0;
  6.     /*~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~*/
  7.  
  8.     switch(c->render_mode) {
  9.     case GL_RENDER:
  10.         break;
  11.     case GL_SELECT:
  12.         if(c->select_overflow) {
  13.             result = -c->select_hits;
  14.         }
  15.         else {
  16.             result = c->select_hits;
  17.         }
  18.  
  19.         c->select_overflow = 0;
  20.         c->select_ptr = c->select_buffer;
  21.         c->name_stack_size = 0;
  22.         break;
  23.     default:
  24.         assert(0);
  25.     }
  26.  
  27.     switch(mode) {
  28.     case GL_RENDER:
  29.         c->render_mode = GL_RENDER;
  30.         break;
  31.     case GL_SELECT:
  32.         c->render_mode = GL_SELECT;
  33.         assert(c->select_buffer != NULL);
  34.         c->select_ptr = c->select_buffer;
  35.         c->select_hits = 0;
  36.         c->select_overflow = 0;
  37.         c->select_hit = NULL;
  38.         break;
  39.     default:
  40.         assert(0);
  41.     }
  42.  
  43.     return result;
  44. }
  45.  
  46. /* */
  47. void GLAPIENTRY glSelectBuffer(GLsizei size, GLuint *buf) {
  48.     GLContext    *c = gl_get_context();
  49.  
  50.     assert(c->render_mode != GL_SELECT);
  51.  
  52.     c->select_buffer = buf;
  53.     c->select_size = size;
  54. }
  55.